iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 21
0
自我挑戰組

Micropython x ESP H/W 之三十個錦囊妙計系列 第 21

[錦囊-貳拾壹] ESP x MicroPython只能做prototype 嗎?

  • 分享至 

  • xImage
  •  

由於ESP Device 容易從uart中拉出原始碼, 如果用標準的程序是很容易做到逆向的. 難道就無法跳脫出只能當prototype的命運嗎?
PS: 據傳圓剛的智慧插座就是使用ESP裝置去做成商品的, 所以要商品化是一定有辦法達成

筆者嘗試過幾種作法:

類型一

  1. (硬體) 自己設計電源板作為ESP01S 供電使用, 並且不把UART to USB (CH340G) 接進去.
  2. (軟體) 將ESP裝置的AP Mode及webrepl server關閉

類型二 修改FW對於main.py的存取方式

  1. 下載MicroPython source code MicroPython Github
  2. 修改main.c中關於讀取main.py的方式
#if MICROPY_MODULE_FROZEN
    pyexec_frozen_module("_boot.py");
    pyexec_file("boot.py");
    if (pyexec_mode_kind == PYEXEC_MODE_FRIENDLY_REPL) {
        pyexec_file("main.py");
    }
#endif

[秘訣]
(1) 可由上面的程式碼中看到, main.py的讀取方式是從user space 中讀取, 如果要起來的話就是要改成使用下面的方式, 意思是micropython 在讀取main.py 這個程式時會從F/W的內建模組目錄中直接讀取, 而非從使用者空間讀取, 這樣就可以達到保護跟隱藏程式碼的目的

pyexec_frozen_module("main.py")

(2) 檔案要放在**/opt/micropython/ports/esp8266/modules** 這個目錄中, 這樣在編譯好後就會以內建的模組存在於FW中. 除此之外, 自己寫的其他模組也可以塞在裏頭

[範例] 增加一個自定義的模組檔進入原始碼中的內建模組, 重新編譯F/W Image 後驗證是否有加入成功

  1. 複製自定義的模組檔進入內建模組目錄
cp uping.py /opt/micropython/ports/esp8266/modules

https://ithelp.ithome.com.tw/upload/images/20181105/20103824pnMMHqBF9W.png
2. 重新編譯F/W Image

make clean
make
  1. 驗證是否可以匯入uping
import uping

https://ithelp.ithome.com.tw/upload/images/20181105/20103824pVyjm6hZG6.png
4. 驗證成功, 可以被成功匯入


上一篇
[錦囊XX] 程式掛掉後該如何自動重跑呢? [以try ... except為例]
下一篇
[錦囊-貳拾貳] 如何自行編譯MicroPython 原始碼呢?[以ports/Unix 為例]
系列文
Micropython x ESP H/W 之三十個錦囊妙計31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言